import java.util.ArrayList;


public class Graphe {

	/* G=(V,E) V un ensemble de Sommets et E un ensemble d'arc 
	 * representation par ArrayList ? 
	 */
	
	/* VARIABLES */
	ArrayList<Sommet> V;
	
	public Graphe() {
		V = new ArrayList<Sommet>();
	}

	public ArrayList<Sommet> getV() {
		return V;
	}
	
	public void addSommet(Sommet s) {
		V.add(s);
	}
	
	public Sommet getSommet(int index) {
		for(int i=0;i<V.size();i++)
			if(V.get(i).getNom()==index)
				return V.get(i);
		return null;
		
	}
	
	//Initialement, tous les sommets ont un score de 1/n.
	public void init() {
		double taille_double = V.size();
		for(int i=0;i<V.size();i++) {
			V.get(i).setPoids(1/taille_double);
		}
	}
	
	public double additionPartielle(Sommet v) {
		
		double res= 0.0;
		for(Sommet u : v.getPredecesseurs())
			res+=(u.getPoids()/(double)u.getVoisins().size());
		return res;
	}
	
	public double addition(Sommet v) {
		
		return ((1-0.85)/(double)V.size())+0.85 * additionPartielle(v);
		
	}
	
	public void calcul() {
		boolean change=true;
		//int cpt=0;
		do {
			change=false;
			for(Sommet s : V) {
				if(s.getPoids()!=addition(s))
					change=true;
				s.setPoids(addition(s));
			
			}
		//cpt++;
		}while(change);
		//System.out.println("boucles faites : "+cpt);
	}
	
	public double pourcentage(Sommet v) {
		double tpo=0;
		for(Sommet s : V)
			tpo+=s.getPoids();
		return Math.floor(((v.getPoids()*100/tpo)*100)+0.5)/100;
	}
	
}
